public class LeetCode125 {
    public static void main(String[] args) {

        System.out.println(reverse("A man, a plan, a canal: Panama"));

    }

    /**
     * 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后，短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
     *
     * 字母和数字都属于字母数字字符。
     *
     * 给你一个字符串 s，如果它是 回文串 ，返回 true ；否则，返回 false 。
     * @param s
     * @return
     */
    public static boolean isPalindrome(String s) {
        //1.去除a-z,A-Z,0-9之外的
        String filter = filter(s);
        System.out.println(filter);
        //2.前后指针走，左边的不能超过右边
        int p = 0, t = filter.length()-1;
        boolean re = true;
        //3.如果出现不相等的情况返回false
        while (p <= t){
            if (filter.charAt(p++) != filter.charAt(t--))
                re = false;
        }

        return re;
    }

    public static String filter(String input) {
        if (input == null || input.isEmpty()) {
            return input;
        }
        char[] inputChars = input.toCharArray();
        int resultIndex = 0;
        for (int i = 0; i < inputChars.length; i++) {
            char c = inputChars[i];
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
                inputChars[resultIndex++] = c;
            }
        }
        return new String(inputChars, 0, resultIndex).toLowerCase();
    }

    public static boolean reverse(String s){
        String lowerCase = filter(s).toLowerCase();
        System.out.println(lowerCase);
        StringBuilder stringBuilder = new StringBuilder(lowerCase);

        String rev = stringBuilder.reverse().toString();
        System.out.println(rev);

        return lowerCase.equals(rev);
    }


}
